Image denoising is an important functional block in an image-processing pipeline. The goal of image denoising methods is to recover the original image from a noisy measurement. Images generated by digital camera sensors pick up noise from a variety of sources, which should be reduced for aesthetic or practical (e.g., machine vision) purposes. Ideally, a noise reduction algorithm utilized by an image denoising block should improve image clarity by reducing noise while minimizing loss of real detail. The technical difficulty lies in robustly distinguishing noise from image details.
Many image denoising algorithms that perform some averaging or weighting of a pixel relative to a grouping of pixels spatially surrounding the target pixel are referred to as “local mean” or “local smoothing” filters. A Gaussian Blur filter is an example of a uniform local mean filter. Non-local image denoising algorithms have gained popularity in the last decade because, relative to many local means algorithms, post-filtering clarity is improved while the real detail loss is reduced. In a “non-local means” (NLM) algorithm, an NLM filter utilizes redundancy of self-similarity found within an image to reduce edge blurring by taking a mean of a greater number of pixels in the image, weighted by how similar the pixels are to the target pixel based on an comparison of multi-pixel patches. In some exemplary NLM algorithms, for each input pixel, a target patch containing the target pixel is determined Other candidate patches, typically limited to within a neighborhood of the target patch, are then assessed for similarity. An average pixel value may then be computed as a weighted average of the candidate patches according to the “self-similarity” weight assigned to the candidate patch through application of a similarity filter function.